package com.jumi.microservice.state;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.jumi.microservice.constant.GoodsStatus;
import com.jumi.microservice.domain.GoodsDO;
import com.jumi.microservice.domain.GoodsDTO;
import com.jumi.microservice.mapper.GoodsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * 下架状态
 *
 * @author Administrator
 */
@Component
public class PulledOffShelvesGoodsState implements GoodsState {

    /**
     * 商品管理DAO组件
     */
    @Autowired
    private GoodsMapper goodsMapper;

    /**
     * 执行商品流转到当前状态来的业务逻辑
     *
     * @param goods 商品
     * @throws Exception
     */
    @Override
    public void doTransition(GoodsDTO goods) {
        LambdaUpdateWrapper<GoodsDO> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.set(GoodsDO::getGoodsState, GoodsStatus.PULLED_OFF_SHELVES.getCode())
                .set(GoodsDO::getUpdateTime, LocalDateTime.now())
                .set(GoodsDO::getModifier,goods.getModifier())
                .eq(GoodsDO::getId, goods.getId());
        goodsMapper.update(new GoodsDO(), updateWrapper);
    }

    /**
     * 判断当前商品能否执行编辑操作
     *
     * @param goods 商品
     * @return 能否执行编辑操作
     */
    @Override
    public Boolean canEdit(GoodsDTO goods) {
        return true;
    }

    /**
     * 判断能否执行上架操作
     *
     * @param goods 商品
     * @return 能否执行上架操作
     * @throws Exception
     */
    @Override
    public Boolean canPutOnShelves(GoodsDTO goods) {
        return Boolean.TRUE;
    }

    /**
     * 判断能否执行下架操作
     *
     * @param goods 商品
     * @return
     * @throws Exception
     */
    @Override
    public Boolean canPullOffShelves(GoodsDTO goods) {
        return Boolean.FALSE;
    }

    /**
     * 能否执行删除操作
     *
     * @param goods 商品
     * @return
     * @throws Exception
     */
    @Override
    public Boolean canRemove(GoodsDTO goods) {
        return Boolean.TRUE;
    }
}
